package com.tsh.erp.support;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import kiven.jee.utils.ip.IPUtil;
import org.apache.commons.lang.StringUtils;
import com.tsh.erp.model.Department;
import com.tsh.erp.model.User;

public class OnlineUserHelper {
	/**
	 * 保存在线用户信息，String 保存 sessionid
	 */
	private static Map<String, OnlineUser> onlineUsers = new LinkedHashMap<String, OnlineUser>();

	/**
	 * 返回所有的在线用户Map
	 * 
	 * @return
	 */
	public static Map<String, OnlineUser> getOnlineUsers() {
		return onlineUsers;
	}

	/**
	 * 移除在线用户
	 * 
	 * @param sessionId
	 */
	public static void removeOnlineUser(String sessionId) {
		onlineUsers.remove(sessionId);
	}

	/**
	 * 根据Userid移除在线用户
	 * 
	 * @param userid
	 */
	public static void removeOnlineUserByUserid(String userid) {
		if (onlineUsers != null && onlineUsers.size() > 0) {
			for (OnlineUser online : onlineUsers.values()) {
				if (online.getUsername().equalsIgnoreCase(userid)) {
					onlineUsers.remove(online.getSessionid());
				}
			}
		}
	}
	
	/**
	 * 添加在线用户，以sessionid作为key
	 * 
	 * @param sessionId
	 * @param user
	 */
	public static void addOnlineUser(String sessionId, User user) {
		OnlineUser online = new OnlineUser();
		online.setUserid(user.getUserid());

		online.setIp(user.getLastloginip());
		// 此栏位可以移除
		if (!StringUtils.isNotBlank(user.getLastloginip())) {
			online.setIpname(IPUtil.getAddress(user.getLastloginip()));
		}
		online.setLogindate(user.getLastlogindate());
		online.setUsername(user.getUsername());
		online.setSessionid(sessionId);
//		Department dept = user.getDepartment();
//		if (dept != null) {
//			online.setDeptname(dept.getName());
//			online.setDeptcode(dept.getCode());
//		}
		
		onlineUsers.put(sessionId, online);
	}

	/**
	 * 检查在线用户中是否存在userid的用户
	 * 
	 * @param userid
	 * @return
	 */
	public static boolean existUser(String userid) {
		boolean flag = false;
		if (onlineUsers != null && onlineUsers.size() > 0) {
			for (OnlineUser online : onlineUsers.values()) {
				if (online.getUserid().equalsIgnoreCase(userid)) {
					flag = true;
				}
			}
		}

		return flag;
	}

	/**
	 * 根据Userid获得在线用户信息
	 * 
	 * @param userid
	 * @return
	 */
	public static OnlineUser getOnlineUserByUserid(String userid) {
		OnlineUser onlineUser = null;

		if (onlineUsers != null && onlineUsers.size() > 0) {
			for (OnlineUser online : onlineUsers.values()) {
				if (online.getUsername().equalsIgnoreCase(userid)) {
					onlineUser = online;
				}
			}
		}

		return onlineUser;
	}

	/**
	 * 根据Sessionid 获得在线用户
	 * 
	 * @param sessionid
	 * @return
	 */
	public static OnlineUser getOnlineUserBySessionid(String sessionid) {
		return onlineUsers.get(sessionid);
	}
	
	/**
	 * 获得在线用户的Userid,username;
	 * 
	 * @return
	 */
	public static Map<String,String> getOnlineUsernames() {
		Map<String,String> result = new HashMap<String,String>();
		if (onlineUsers != null && onlineUsers.size() > 0) {
			for (OnlineUser online : onlineUsers.values()) {
				result.put(online.getUserid(), online.getUsername());
			}
		}
		
		return result.size() > 0 ? result : null;
	}

}
